package com.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import com.facade.TelefoneFacade;
import com.model.Telefone;
import com.model.Person;
import com.model.enuns.TipoTelefone;
import com.model.enuns.UF;
import com.sun.faces.context.flash.ELFlash;

@ViewScoped
@ManagedBean
public class TelefoneMB extends AbstractMB implements Serializable {

    private static final long serialVersionUID = 1L;
    private Telefone telefone;
    private Telefone telefoneTemp;
    private List<Telefone> telefones;
    private TelefoneFacade facade;

    public TelefoneFacade getFacade() {
        if (facade == null) {
            facade = new TelefoneFacade();
        }

        return facade;
    }

    public Telefone getTelefone() {
        if (telefone == null) {
            telefone = (Telefone) ELFlash.getFlash().get("telefone");
            if (telefone == null) {
                telefone = new Telefone();
            }
        }
        return telefone;
    }

    public void setTelefone(Telefone telefone) {
        this.telefone = telefone;
    }

    public void persiste() {
        if (telefone.getId() == 0) {
            create();
        } else {
            update();
        }
    }

    public void create() {
        try {
            getFacade().createTelefone(telefone);
//			closeDialog();
            displayInfoMessageToUser("Criado com Sucesso");
            load();
            reset();
        } catch (Exception e) {
			keepDialogOpen();
            displayErrorMessageToUser("Ops, n�o foi possivel criar. Tente mais tarde");
            e.printStackTrace();
        }
    }

    public void update() {
        try {
            getFacade().updateTelefone(telefone);
			closeDialog();
            displayInfoMessageToUser("Atualizado com Sucesso");
            load();
            reset();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, nao foi possivel atualizar. Tente mais tarde");
            e.printStackTrace();
        }
    }
    
    

    public void delete() {
        try {
            
            getFacade().deleteTelefone(telefone);
//			closeDialog();
            displayInfoMessageToUser("Excluido com Sucesso");
            load();
            reset();
        } catch (Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, n�o foi possivel Excluir. Tente mais tarde");
            e.printStackTrace();
        }
    }

    public List<Telefone> getAllTelefones() {
        if (telefones == null) {
            load();
        }

        return telefones;
    }

    private void load() {
        telefones = getFacade().listAll();
    }

    public void reset() {
//        this.setTelefoneTemp(telefone);
//        ELFlash.getFlash().put("telefoneTemp", telefone);
        telefone = new Telefone();
    }

    public String prepararAdicionar() {
        reset();
        return "telefoneCad.xhtml";
    }

    public String prepararVisualizar(int id) {

        //telefoneTemp = (Telefone) ELFlash.getFlash().get("entity");
        telefoneTemp = facade.findTelefone(id);
        ELFlash.getFlash().put("telefoneTemp", telefoneTemp);

        return "telefoneRelat.xhtml";
    }

    public String prepararAlterar(int id) {
        telefoneTemp = facade.findTelefone(id);
        ELFlash.getFlash().put("telefone", telefoneTemp);
        telefone = telefoneTemp;

        return "telefoneCad.xhtml";
    }
    
    public String prepararRemover(int id) {
        telefoneTemp = facade.findTelefone(id);
        ELFlash.getFlash().put("telefone", telefoneTemp);
        telefone = telefoneTemp;

        return "telefones.xhtml";
    }

    public List<TipoTelefone> getTiposTelefone() {
        List<TipoTelefone> tiposTelefone = new ArrayList<TipoTelefone>();
        for (TipoTelefone tipo : TipoTelefone.values()) {
            tiposTelefone.add(tipo);
        }
        return tiposTelefone;

    }

    public Telefone getTelefoneTemp() {
        telefoneTemp = (Telefone) ELFlash.getFlash().get("telefoneTemp");
        return telefoneTemp;
    }

    public void setTelefoneTemp(Telefone telefoneTemp) {
        this.telefoneTemp = telefoneTemp;
    }
}